import random

from langchain.agents import initialize_agent, Tool, AgentType
from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
# 模拟天气
def get_weather(location):
    """根据地区查询天气和温度"""
    weather_conditions = ["晴朗，温度 31°C", "下雨，温度12°C", "阴天20°C"]
    return random.choice(weather_conditions)
# 将函数封装为 LangChain 工具
weather_tool = Tool(
    name="Weather Query",
    func=lambda location: get_weather(location),
    description="根据位置查询当前天气情况"
)
# 构建 Prompt 模板，用于指导模型逐步推理和行动
prompt_template = PromptTemplate(input_variables=["query"],template="""
你是一个专业的旅行规划助手，请根据用户提供的【天气类型】和【旅行地点】，结合季节特征输出详细的旅行注意事项。
要求：
1. 结构化输出以下板块：
   - 基础天气分析（温度/湿度/特殊气象风险）
   - 必备物品清单（按优先级排序）
   - 健康安全提示（如防晒/防寒/过敏原等）
   - 活动建议（推荐/不推荐的项目及原因）
2. 用表情符号区分板块标题，语言简洁易懂
3. 特殊要求：
   - 若涉及极端天气（暴雨/暴雪/台风等），用⚠️符号突出风险预警
   - 山区/海边等特殊地形需增加对应安全提示
   - 老人/儿童等特殊人群单独标注关怀建议
用户的请求：{query}""")
# 初始化代理，设置为 ReAct 风格
llm = ChatOpenAI(model='deepseek-ai/DeepSeek-R1').bind(logprobs=True)
agent = initialize_agent(
    tools=[weather_tool],
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,  # 设置为 ReAct 风格
    verbose=True
)
# 用户查询
query = "去北京旅游要注意什么"
# 使用代理处理查询
response = agent({"input": query})
print(response["output"])
